# Problem: 什么是 WebSocket 心跳?
*[interview]: start
WebSocket 是用来建立客户端与服务端的长连接的,在实际链接过程中可能会有一些情况导致连接异常客户端和服务器相互之间没有反馈信息,WebSocket心跳就是为了保证二者之间链接的可持续性和稳定性的。例如:
- 如果设备断网,不会触发webSocket的任何事件,前端也就无法知道当前是连接还是断开的状态。这个时候如果调用send方法,浏览器才会发现连接断开了,便会立刻或者一定时间后触发 onclose 函数。如果是后端的webSocket服务发生了异常断开。前端也没有收到断开的通知;
- 为了解决上面的两个问题,以前端作为主动方,发送心跳消息ping,后端收到ping类型的消息,立马返回pong消息,告知前端连接正常。如果一定时间没有收到pong消息,就说明连接不正常,一旦发现异常,前端就会持续执行重连逻辑,直到重连成功;
- 因此webSocket的心跳只要用于检测网络和前后端连接问题。避免丢包
*[interview]: end